package com.sjsu.cloudmanager.dao;

import com.sjsu.cloudmanager.model.CloudLab;
import com.sjsu.cloudmanager.model.ComputingMachine;
import com.sjsu.cloudmanager.model.Software;

import java.util.List;
import java.util.Set;

/**
 * cloud lab dao
 * User: ckempaiah
 * Date: 9/14/11
 * Time: 11:50 PM
 * To change this template use File | Settings | File Templates.
 */
public interface CloudLabDao {
    /**
     * create cloud lab
     * @param labName
     * @param status
     * @return
     */
    public Integer createCloudLab(String labName, String status);

    /**
     * saves or updates cluod lab
     * @param cloudLab
     */
    public void saveOrUpdateCloudLab(CloudLab cloudLab);

    /**
     * save or update any domain model
     * @param object
     */
    public void saveOrUpdate(Object object);

    /**
     * gets cloud lab
     * @param labId
     * @return
     */
    public CloudLab getCloudLab(Integer labId);

    /**
     * adda a new computing machine
     * @param computingMachine
     */
    public void addComputingMachine(ComputingMachine computingMachine);

    /**
     * gets a computing machine
     * @param machineId
     * @return
     */
    public ComputingMachine getComputingMachine(Integer machineId);

    /**
     * gets a cloud software
     * @param softwareId
     * @return
     */
    public Software getCloudSoftware(Integer softwareId);

    /**
     * removes/deletes a cloud lab
     * @param cloudLab
     */
    public void removeCloudLab(CloudLab cloudLab);

    /**
     * removes a computing machines
     * @param computingMachine
     */
    public void removeComputingMachine(ComputingMachine computingMachine);

    /**
     * gets cloud labs
     * @return
     */
    public List<CloudLab> getCloudLabs();

    /**
     * finds computing machines
     *
     * @param labId
     * @return
     */
    public List<ComputingMachine> findComputingMachines(Integer labId);

    /**
     * gets all computing machines
     * @return
     */
    public List<ComputingMachine> getAllComputingMachines();

    public List<Software> getSoftwareList();
}
